package 系统资源类

import (
	扩展类 "gitee.com/go_888/extends/extend"
	"gitee.com/go_888/internal-call/gopsutil/disk"
	"log"
)

// X取磁盘分区 根据参数获取系统的磁盘分区信息
// 全部 参数决定是否获取所有分区信息, 如果为 false，则只返回:物理设备（例如硬盘、光驱、USB 键盘）并忽略所有其他设备
// 返回值是一个X磁盘分区切片，包含磁盘分区的详细信息
func X取磁盘分区(全部 bool) []X磁盘分区 {
	// 初始化一个空的X磁盘分区切片，用于存储磁盘分区信息
	返回 := []X磁盘分区{}

	// 使用disk.Partitions函数获取系统磁盘分区信息，参数决定是否获取所有分区
	// 此处忽略错误处理，可能需要在实际使用中根据情况处理错误
	d1, err := disk.Partitions(全部)
	if err != nil {
		log.Printf("取磁盘分区失败：%v", err)
	}
	// 遍历获取的磁盘分区信息，构造X磁盘分区对象并添加到返回切片中
	for _, v := range d1 {
		// 将当前分区的信息构造为X磁盘分区结构体，并追加到返回切片中
		返回 = append(返回, X磁盘分区{
			X设备名:    v.Device,
			X挂载点:    v.Mountpoint,
			X文件系统类型: v.Fstype,
			X挂载选项:   v.Opts,
		})
	}

	// 返回填充了磁盘分区信息的切片
	return 返回
}

type X磁盘分区 struct {
	X设备名    string   `json:"device"`
	X挂载点    string   `json:"mountpoint"`
	X文件系统类型 string   `json:"fstype"`
	X挂载选项   []string `json:"opts"`
}

// X取磁盘分区信息 获取指定路径的分区信息，包括总大小、可用大小、已用大小和已用百分比。
// 参数:
// 路径 - 需要获取分区信息的目录路径。linux下如:“/dev/vda1”"，windows下如:"C:\"。
// 返回值:
// X分区信息 - 包含分区详细信息的结构体。
// error - 如果获取分区信息时发生错误，返回错误信息。
func X取磁盘分区信息(路径 string) (X分区信息, error) {
	d2, err := disk.Usage(路径) // 获取指定路径的硬盘使用情况
	if err != nil {
		log.Printf("取分区信息失败：%v", err)
		return X分区信息{}, err // 如果发生错误，返回空的分区信息结构体和错误信息
	}
	return X分区信息{
		X路径:    d2.Path,
		X总大小:   d2.Total, //字节
		X可用大小:  d2.Free,  //字节
		X已用大小:  d2.Used,  //字节
		X已用百分比: 扩展类.X四舍五入(d2.UsedPercent, 2),
	}, err // 返回分区信息结构体和错误信息
}

type X分区信息 struct {
	X路径    string  `json:"path"`        // X路径
	X总大小   uint64  `json:"total"`       // X总大小
	X可用大小  uint64  `json:"free"`        // X可用大小
	X已用大小  uint64  `json:"used"`        // X已用大小
	X已用百分比 float64 `json:"usedPercent"` // X已用百分比
}
